android rom开发_安卓双系统_安卓写入重定向

Andorid双系统

https://mart.coding.net/project/7929
Product By:DX

目标需求

  1. “原系统”与“定制系统”之间可快速切换。
  2. “原系统”与“定制系统”相互隔离,彼此不能访问数据。
  3. “原系统”与“定制系统”之间可通过特定接口交换数据。
  4. “定制系统”中可通过 App 管理手机通讯端口(包括蓝牙、 Wi-Fi、NFC、 3G/4G 网络、 电话、短信、 USB 等)。
  5. “定制系统”中的 App 软件可定制(添加、 删除)。
  6. “定制系统”中的写操作不会在“原系统”存储中留下痕迹。
  7. 改造后的手机与原商品手机无明显痕迹。

技术方向

  • AFW/多用户方向
  • 沙箱方向

AFW/多用户方向

利用Android多用户机制可以达成,如果基于7.0的Android,则可以直接利用Android For Work的新特性来做扩展。

其中AFW最主要的特性是:

  • 为企业提供升级后的安全和管理功能。
  • 支持Android for Work的智能机能够安全地分离企业和个人应用
  • Android for Work 应用将允许企业管理电邮、日历、联系人等关键工具。
    百度百科:地址传送门
    Android Developer:地址传送门

修改点以及影响面:

修改点
主要集中在应用层以及框架层:

  • Launcher需要针对AFW做特定适配,以便支持AFW相关特性
  • Settings中可能需要配置AFW开关设定(视具体需求)
  • System UI主要体现在后台应用显示/通知栏消息等
  • 框架层,ActivityManager 以及 PackageManager会是修改大头,需要分离出主用户与AFW从账号

影响面:

  • 扩展了User,会造成各类Service存在两份的情况,影响整机性能
  • 可能存在部分软件不兼容,例如未支援AFW或无法在从用户空间使用的应用

优势/劣势

优势 劣势
基于AFW/多用户做修改,稳定性高,可靠性有保障 ROM强定制,需要拿到特定ROM的相关代码
存在成熟方案,市面上大多数“安全系统”,“隐私模式”均采用这类方案 多用户空间并存,占用系统资源

沙箱方向

沙箱一般用来表述独立于外部环境的虚拟系统,沙箱内的所有操作不会影响到外部世界。
目前市面上,沙箱主要用来作为各种双开方案,例如LBE平行空间双开助手

LBE平行空间LEB官网传送门

沙箱方案一般会使用java反射/hook/对象代理这一类非常规Android编程技术

修改点以及影响面:

SandBoxie修改点

AFW方案不同,SandBoxie方案会更加轻量级,更倾向于应用级

  • 对于整个Android系统来说,SandBoxie是一个普通应用
  • SandBoxie应用内部会维护一个虚拟世界,该世界中会有整套类Android系统
  • 把所有Framworks的部分抽到应用内部,也就是红色箭头所指示的意义
  • 由于需要内置整套类Android系统,需要hook到部分native层的代码

影响面:

  • 对原始系统基本无影响
  • 部分应用在沙箱环境运行可能会有异常(详情可以参考LBE平行空间相关问题)

优势/劣势

优势 劣势
不修改原生系统 Hook整套frameworks,当Android版本升级时,重适配代价较大
存在成熟方案标杆双开系应用 部分应用需要额外适配,兼容性存在风险
不需要ROM源码 —–

Andorid写入重定向

目标需求

  1. 改造后的手机与原商品手机无明显痕迹。
  2. 可以事先配置需要被重定向的目标(某款 App 或者是某个路径)以及要重定向到的目标路径。

技术方向

Android系统中每个App都是一个独立的用户,每个App在初始化时都会存在一个独立的文件目录,作为数据目录,因此为实现该需求,只需要重定向数据目录即可。
Application运行时的各类信息大致如下图,红色箭头指示了重定向的目标属性:dataDir
重定向目标属性

修改点以及影响面:

修改点如上图所示:

  • App package安装/初始化时直接修改目标属性dataDir

影响面:

  • 需要在初始化时指定,否则会造成数据异常/丢失